import axios from 'axios'
const request = axios.create({
    baseURL: 'http://geek.itheima.net/'
})
import store from '@/store'
// 请求拦截
request.interceptors.request.use(function (config) {
    // 如果有token我才加token,没有token就不加了
    if (store.state.tokenObj.token) {
        // 添加token到headers,注意Bearer后面要有一个空格的!
        config.headers.Authorization = 'Bearer ' + store.state.tokenObj.token
    }
    return config
}, function (error) {
    return Promise.reject(error)
})
import router from '@/router'
import { Toast } from 'vant'
// 响应拦截
request.interceptors.response.use(function (response) {
    return response;
}, async function (error) {
    if (error.response.status === 401) {
        // 利用refresh_token去获取最新token
        // 所以发请求
        // 这里不能用request对象发请求
        // 因为用request会触发请求拦截，所以明明我在这里加了refresh_token
        // 但是触发请求拦截后，会用过期的token把refresh_token给覆盖了，所以服务器报500错误
        // 所以一朝回到解放前，用axios发即可
        // 但是用axios要设置完整的地址，因为axios没有配置基地址
        try {
            let res = await axios({
                url: 'http://toutiao.itheima.net/v1_0/authorizations',
                method: 'put',
                headers: {
                    Authorization: 'Bearer ' + store.state.tokenObj.refresh_token
                }
            })
            // 拿到最新token保存到vuex和本地存储
            // 调用vuex的方法就行了
            // 注意：要给vuex赋值的是一个对象，对象里要有token和refresh_token两个属性
            // token就给刚刚刷新得到的最新token
            // refresh_token就用原来的即可
            store.commit('changeToken', {
                token: res.data.data.token,
                refresh_token: store.state.tokenObj.refresh_token
            })
            // token过期自动刷新,error里面的config就是本次发请求的数据
            return request(error.config)
        } catch{
             // 能来到这，只能证明利用refresh_token去刷新时也报错了
            // 那就肯定就是refresh_token有问题，所以就该回到登录页
            // 让它重新登录
            // 路由跳转到登录页
            router.push('/login')
            // 弹出提示
            Toast.fail('登录状态失效，请重新登录')
            return Promise.reject(error);
        }
    }

    return Promise.reject(error);
});
export default request